package onez.project.core.filter;

import onez.project.core.context.GatewayContext;

/**
 * Filter接口  过滤器顶层接口
 * 定义了过滤器的基本行为和属性，主要用于在请求处理过程中进行拦截和处理
 */
public interface Filter {
    /**
     * 执行过滤操作的方法
     *
     * @param ctx 网关上下文，包含了请求和响应的相关信息，以及过滤器链的执行环境
     * @throws Exception 在执行过滤操作时可能抛出的异常
     */
    void doFilter(GatewayContext ctx) throws  Exception;

    /**
     * 获取过滤器的执行顺序
     * 默认实现是通过反射获取FilterAspect注解的order值，如果不存在则使用最大整数值
     *
     * @return 过滤器的执行顺序，值越小执行顺序越高
     */
    default int getOrder(){
        FilterAspect annotation = this.getClass().getAnnotation(FilterAspect.class);
        if(annotation != null){
            return annotation.order();
        }
        return Integer.MAX_VALUE;
    };
}

